package com.rw.coco.util.config;

import com.rw.tool.util.properties.PropertiesReader;

import java.util.*;

/**
 * 别称工具类
 * 在COC中，有一些名称拥有别称
 * 我们需要排除这些别称
 */
public class AnotherNameConfig {
    // 别名列表
    public final List<PropName> propNameList;

    public AnotherNameConfig(Properties config) {
        // 读取配置文件的别名列表
        PropertiesReader reader = new PropertiesReader(config);

        // 遍历别名列表
        List<PropName> nameList = new ArrayList<>();
        Collection<String> anotherNameList = reader.getMap().values();
        for (String names : anotherNameList) {
            // 使用逗号分隔，第一个名字作为主名字，其余为别名
            String[] nameArr = names.split(",");
            PropName propName = new PropName(nameArr[0], new HashSet<>(Arrays.asList(nameArr)));
            nameList.add(propName);
        }

        this.propNameList = Collections.unmodifiableList(nameList);
    }

    /**
     * 把名字变为主要名字
     * 如果该名字为别名，则变为主要名字
     * 如果没有，则返回原名
     *
     * @param name 名字
     * @return 主要名字
     */
    public String getMainName(String name) {
        for (PropName propName : propNameList) {
            // 如果名字和某个别名匹配
            boolean match = propName.getAnotherName()
                    .stream()
                    .anyMatch(anotherName -> anotherName.equalsIgnoreCase(name));

            if (match) {
                return propName.getName();
            }
        }
        return name;
    }
}
